package game.controler.ecouteurs.vue;

import game.controler.EtatJeu;
import game.controler.gestionnaires.elementjeu.GestionnaireDecors;
import game.model.objets.ElementDecors;
import game.model.objets.ElementJeu;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;

/**
 *
 * @author Gab'z
 */
public class EcouteurVueElmtDecors implements MouseListener {

    private String id;

    public EcouteurVueElmtDecors(String id) {
        this.id = id;
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        if (EtatJeu.clicVueAutorisé()) {
            System.out.println("clic sur un ElementDecors : " + id);
            System.out.println("Coord (x,y) = (" + e.getX() + "," + e.getY() + ")");
            Point coordRelativeClic = new Point(e.getX(), e.getY());

            ElementDecors elementDecors = GestionnaireDecors.getGdecors().getElementDecors(id);
            String idPlanCourant = EtatJeu.getIdPlanCourant();
            if (TesteurImage.isTransparent(ElementDecors.class, id, coordRelativeClic)) {
                Point coordAbsolueClic = new Point(elementDecors.getPosition().x + coordRelativeClic.x, elementDecors.getPosition().y + coordRelativeClic.y);
                ElementJeu elementJeu = null;
                // couche 1 -> elementDécors
                if (elementJeu == null) {
                    ArrayList<String> listeElmtDecors = GestionnaireDecors.getGdecors().getListeDecorsPlan(idPlanCourant);
                    ArrayList<String> listeElmtDecorsTestable = new ArrayList<String>(0);
                    for (int i = 0; i < listeElmtDecors.size(); i++) {
                        ElementDecors elem = GestionnaireDecors.getGdecors().getElementDecors(listeElmtDecors.get(i));
                        if (elem.isVisible() && !elem.getId().equals(elementDecors.getId())) {
                            listeElmtDecorsTestable.add(elem.getId());
                        }
                    }
                    for (String idElmtDecors : listeElmtDecorsTestable) {
                        if (elementJeu == null) {
                            elementJeu = TesteurImage.testerClic(ElementDecors.class, idElmtDecors, coordAbsolueClic);
                        }
                    }
                }

                if (elementJeu != null) {
                    System.out.println("Clic sur " + elementJeu.getId());
                    elementJeu.executeActionClicVue();
                } else {
                    System.out.println("Rien derrière " + elementDecors.getId());
                }

            } else {
                System.out.println("pixel plein");
                elementDecors.executeActionClicVue();
            }
        } else {
            System.out.println("EcouteurVueElmtDecors : clic non autorisé");
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {
        //  throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // throw new UnsupportedOperationException("Not supported yet.");
    }
}
